package main

import (
	"fmt"
)

func main() {
	// 1 string底层是一个 byte 数组，因此 string 也可以进行切片处理
	str := "hello@163.com"
	// 使用切片获取到 163.com
	slice := str[6:]
	fmt.Println("slice=", slice)
	fmt.Println("===================================================================")
	// 2 string是不可变的，也就说不能通过 str[0] = 'z' 方式来修改字符串
	// str[0] = 'z' // 编译不会通过，报错，原因是 string 是不可变
	fmt.Println("===================================================================")
	// 3 如果需要修改字符串，可以先将string 转化为 []byte/[]rune ，然后修改，最后转成 string
	// "hello@163.com" 改成 "zello@163.com"
	arr1 := []byte(str)
	arr1[0] = 'z'
	str = string(arr1)
	fmt.Println(str)
	// 转成[]byte后，可以处理英文和数字，但是不能处理中文
	// 原因是 []byte 字节来处理，而一个汉字，是3个字节，因此就会出现乱码。
	// 解决方法： 将 string 转成 []rune 即可， 因为 []rune是按字符处理，兼容汉字。
	arr2 := []rune(str)
	arr2[0] = '北'
	str = string(arr2)
	fmt.Println(str)
}
